/*
 * @Description:
 * @Version: 1.0
 * @Author: liyuzhuang
 * @Date: 2022-09-11 16:58:20
 */
export default {
  inserted(el, binding, vnode) {
    // 获取输入框元素
    const input = el.children[0];

    // 定义一个正则表达式，用于匹配非数字字符
    var reg = /[^\d]/g;

    // 如果绑定了参数，则设置输入框的最大长度
    if (binding.arg) {
      input.maxLength = binding.arg;
    }

    // 如果绑定了值，则使用该值作为正则表达式
    if (binding.value) {
      reg = binding.value;
    }

    // 为输入框添加输入事件监听器
    input.oninput = function () {
      // 替换输入值中的非数字字符
      this.value = this.value.replace(reg, "");

      // 如果当前节点是组件实例
      if (vnode.componentInstance) {
        // 手动触发双向绑定
        // $emit 触发组件实例的 input 事件，并传递处理后的值
        vnode.componentInstance.$emit("input", this.value);
      } else {
        // 如果当前节点不是组件实例，则创建并派发自定义事件
        vnode.elm.dispatchEvent(new CustomEvent("input", this.value));
      }
    };
  },
};
